/*
* Created on 12.12.2003
*/
package vitalsFacade;
import observations.*;
/**
* <code>MeasurementAttribute</code> Can hold information about anything that
* can be measured.
*
* @author Sascha Hemminger
* @version 2004-09-10
*/
class MeasurementAttribute implements FacadeAttribute {
protected VitalsFacade facade;
private PhenomenonType phenomenonType;
private Unit updateUnit;
protected String value;
MeasurementAttribute(VitalsFacade facade, PhenomenonType phenomenonType,
Unit updateUnit) {
this.facade = facade;
this.phenomenonType = phenomenonType;
this.updateUnit = updateUnit;
}
protected boolean isNumeric(String value) {
for (int i = 0; i < value.length(); ++i) {
char eachChar = value.charAt(i);
if (Character.isDigit(eachChar))
continue;
if ((i == 0) && (eachChar == '-'))
continue;
if (eachChar == '.')
continue;
return false;
}
return true;
}
/**
* @see vitalsFacade.FacadeAttribute#load()
*/
public void load() {
value = facade.getSubject().getLatestAmountOf(phenomenonType)
.getAmountString();
}
String name() {
return facade.getSubject().getPhenomenonOf(phenomenonType).getName();
}
/**
* @see vitalsFacade.FacadeAttribute#save()
*/
public void save() {
if (value == null)
return;
try {
new Measurement(new Quantity(value, updateUnit), phenomenonType,
facade.getSubject(), facade.getDate());
} catch (OutOfRangeException e) {
value = null;
return;
}
}
String value() {
return value;
}
void value(String newValue) {
value = (isNumeric(newValue) ? newValue : null);
}
}
|